package com.jinke.uang.base;

import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;

public abstract class BaseObserable implements Observer {
    Disposable d;//todo 解除订阅关系，避免内存泄漏
    @Override
    public void onSubscribe(Disposable d) {
        this.d=d;
    }

    @Override
    public void onNext(Object value) {
        onBaseNext(value);
        dispose();
    }

    @Override
    public void onError(Throwable e) {
        onBaseError(e);
        dispose();

//        e.printStackTrace();
//        //在这里做全局的错误处理
//        if (e instanceof ConnectException ||
//                e instanceof SocketTimeoutException ||
//                e instanceof TimeoutException) {
//            //网络错误
//            onError(-9999);
//        } else if (e instanceof ResultException) {
//            //自定义的ResultException
//            //由于返回200,300返回格式不统一的问题，自定义GsonResponseBodyConverter凡是300的直接抛异常
//            onError(((ResultException) e).getErrCode());
//            System.out.println("---------errorCode------->" + ((ResultException) e).getErrCode());
//        }
    }

    @Override
    public void onComplete() {

    }

    //todo 子类实现的常用方法
    protected abstract void onBaseNext(Object value);
    protected abstract void onBaseError(Throwable e);

    public void dispose(){
        if(!d.isDisposed()){
           d.dispose();
        }
    }
}
